OrgOffice.dotm

© orgAnice Lizenz-Verwaltung UG (haftungsbeschränkt) 2000-2023

Letzte Änderung: 2023-03-07

Version: 8.3.0.0

Diese Datei enthält Makros und die Menüeinträge für die orgAnice CRM-Datenbank.

Änderungen an der OrgOffice.dot müssen laut den Regeln für die Entwicklung von orgAnice-Erweiterungen programmiert werden (s. Regeln für AddOns und eigene Erweiterungen). Beim Einhalten der Programmierregeln wird die Updatefähigkeit gewährt, d.h. Ihre Erweiterungen werden bei Updates nicht überschrieben.

I.	Regeln zum Ausfüllen von Textmarken in MS Word:	2

II.	Spezialfall: Bearbeiterbezogene Textmarken	3

III.	Spezialfall: Tabellarische Auflistungen von Datensätzen aus untergeordneten (orgAnice-) Tabellen mit Hilfe von Textmarken	3

5.	Spezialfall: Gruppierte Tabellarische Auflistungen von Datensätzen aus untergeordneten (orgAnice-) Tabellen mit Hilfe von Textmarken	3

6.	Besonderheiten beim Erstellen von Gutschriften	3

7.	Verwendung von anderen Tabellennamen	3

8.	Regeln für AddOns und eigene Erweiterungen	3

Regeln zum Ausfüllen von Textmarken in MS Word:

Für jede im Dokument gefundene Textmarke wird geprüft, ob es eine gleichnamige Dokumentvariable gibt. Wenn ja, wird der Inhalt dieser Dokumentvariable ausgelesen und als OrgBasic-Ausdruck ausgewertet. Das Ergebnis des Ausdrucks wird an die Stelle im Dokument eingefügt, die durch die Textmarke gekennzeichnet ist.

Falls es keine gleichnamige Dokumentvariable gibt, wird geprüft, ob es eine gleichnamige benutzerdefinierte Funktion gibt, und ggf. das Ergebnis dieser Funktion an die entsprechende Stelle gesetzt.

Falls es keine gleichnamige benutzerdefinierte Funktion gibt, wird geprüft, ob es eine gleichnamige Kern-Funktion gibt, und ggf. das Ergebnis dieser Funktion an die entsprechende Stelle gesetzt.

Wenn der Inhalt der Dokumentvariable mit VBA_ beginnt, wird der restliche Inhalt als Name eines Makros interpretiert und dieses Makro ausgeführt. Dabei wird eine Referenz auf das Dokument sowie der Name der Textmarke an das Makro übergeben. Diese Dokumentvariablen werden noch vor der Ausführung des jeweiligen Makros gelöscht, so dass die Makros bei einem späteren durchlauf nicht erneut ausgeführt werden. Ist dies jedoch erwünscht, kann das Makro die Dokumentvariable selbst wieder anlegen. Einzelheiten s. Regeln für AddOns und eigene Erweiterungen, S. 3.

Wenn die o.g. Punkte nicht zutreffen, wird die Textmarke ignoriert.

Hinweise:

Die Dokumentvariablen werden in alphabetischer Reihenfolge abgearbeitet.

Zu jeder Textmarke kann eine weitere mit demselben, um den Zusatz "Text" erweiterten, Namen angelegt werden, deren Inhalt gelöscht wird, falls an der Textmarke selbst nichts eingefügt wird.

Beispiel: Telefax und TelefaxText. Wenn an Telefax nichts eingefügt wird, wird der Inhalte von TelefaxText (z.B. 'Fax:') gelöscht.

Soll eine Textmarke beim Aktualisieren des Dokumentes oder beim Seriendruck nicht erneut ausgefüllt werden, dann muss eine Dokumentvariable mit dem Namen <Textmarkenname>DontUse (Bsp: "AbsenderNameDontUse") und dem Wert "True" angelegt werden.

Spezialfall: Bearbeiterbezogene Textmarken

Bearbeiterbezogene Textmarken sind alle Textmarken, die mit dem Begriff "Bearbeiter", „ErsterUnterzeichner“ oder „ZweiterUnterzeichner“ beginnen. In den folgenden Beispielen kann „Bearbeiter“ durch „ErsterUnterzeichner“ bzw. „ZweiterUnterzeichner“ erstetzt werden.

Es wird abgefragt, welcher Begriff dem Wort "Bearbeiter" folgt. Wir bezeichnen diesen Begriff als [XXX]

(Bsp. Textmarkename = "BearbeiterTelefon" -> [XXX] = "Telefon")

Es wird geprüft, ob eine angepasste Funktion der Form Absender[XXX]Person existiert, die als Parameter eine Zeichenkette mit dem Benutzerkürzel erwartet.
Bsp. AbsenderTelefonPerson ("ADMIN")
Wenn das der Fall ist, wird die angepasste Funktion mit dem Parameter psUser aufgerufen und die Textmarke mit dem Rückgabewert der Funktion gefüllt.

2. Existiert keine solche angepasste Funktion, dann wird versucht mit Hilfe der Kernfunktion PublicUserProp den Wert der öffentlichen Eigenschaft [XXX] abzufragen:
PublicUserProp(psUser, [XXX])
Die Textmarke mit dem Wert öffentlichen Eigenschaft gefüllt.

Ist [XXX] leer, dann wird mit Hilfe der Kernfunktion UserFullName der Benutzername abgefragt:
PublicUserProp (psUser)
Die Textmarke mit dem vollen Namen des Benutzers gefüllt.
Der Bearbeiter wird bspw. in FLetterDialog oder FSerialLetterDialog mit Hilfe eines Dialogs ausgewählt und als psUser übergeben.

Wird derselbe Wert an mehreren Stelle gebraucht (z.B. der Name oder die Telefonnummer des Bearbeiters), so können bis zu zehn weitere Textmarken eingerichtet werden, dessen Namen einfach eine Ziffer angehängt wird:

Bearbeiter

Bearbeiter2

Bearbeiter3

BearbeiterTelefon

BearbeiterTelefon1

BearbeiterTelefon2

Die Namen müssen nicht durchgehend nummeriert sein.

Spezialfall: Tabellarische Auflistungen von Datensätzen aus untergeordneten (orgAnice-) Tabellen mit Hilfe von Textmarken

Es gibt die Möglichkeit über Textmarken die Inhalte aller Datensätze einer untergeordneten (orgAnice-)Tabelle in einer Word-Tabelle darzustellen (bspw. alle Rechnungspositionen zu einem Rechnungsdatensatz oder alle Ansprechpartner zu einer Adresse).

1. Erstellen Sie eine Word-Tabelle mit zwei Zeilen und beliebig vielen Spalten.

2. Erstellen Sie in der ersten Spalte der ersten Zeile eine Textmarke mit dem Namen z_Table und geben Sie als Ausdruck VBA_WordMacros.FillTable ein. Ansonsten sollte die erste Zeile nur für Überschriften verwendet werden.

Weitere Word-Tabellen, die auf die gleiche Art und Weise gefüllt werden sollen, bekommen die Textmarken z_Table2, z_Table3 ... usw. Sie erhalten allerdings immer den gleichen Ausdruck, nämlich: VBA_WordMacros.FillTable!

3. Erstellen Sie eine Dokumentenvariable, deren Name aus zwei Komponenten zusammengesetzt wird. Zum einem der Name der im Punkt 2 festgelegten Textmarke. Für die Tabelle 1 wäre dies: z_Table. Der zweite Teil lautet OrgTableName. Der Name der Dokumentenvariable für die erste Word-Tabelle lautet also: z_TableOrgTableName. Als Wert erhält die neue Dokumentenvariable den Namen der untergeordneten orgAnice-Tabelle (z.B. Ansprechpartner oder Aktivitaeten).

Weitere Word-Tabellen, die auf die gleiche Art und Weise gefüllt werden sollen, bekommen die Dokumentenvariablen z_Table2OrgTableName, z_Table3OrgTableName ... usw.

4. Füllen Sie in der zweiten Zeile der Word-Tabelle die einzelnen Spalten nach der herkömmlichen, im Abschnitt "Regeln zum Ausfüllen von Textmarken in MS Word" beschriebenen Art und Weise, aus. Diese Zeile wird für jeden Datensatz in der untergeordneten orgAnice-Tabelle ausgewertet, ausgefüllt und in die Word-Tabelle als eine neue Zeile eingefügt.

5. Sie können optional einen Index (Sortierschlüssel) angeben, der beim Abfragen der Datensätze verwendet werden soll. Standardmäßig wird der Verknüpfungsindex verwendet, d.h. es werden nur die dem aktuellen übergeordneten Datensatz zugeordneten Datensätze angezeigt (bspw. die der aktuellen Adresse zugeordneten Ansprechpartner). Bei der Angabe eines anderen Sortierschlüssels werden alle sichtbaren Datensätze aus der angegebenen Tabelle angezeigt, unabhängig von dem übergeordneten Datensatz.

Erstellen Sie hierfür eine Dokumentenvariable, deren Name aus zwei Komponenten zusammengesetzt wird. Zum einem der Name der im Punkt 2 festgelegten Textmarke. Für die Tabelle 1 wäre dies: z_Table. Der zweite Teil lautet OrgIndexName. Der Name der Dokumentenvariable für die erste Word-Tabelle lautet also: z_TableOrgIndexName. Als Wert erhält die neue Dokumentenvariable den Namen der zu verwendenden Sortierschlüssels (z.B. „Name“ bei Ansprechpartnern oder „Datum“ bei Aktivitäten).

5. Sie können optional einen Datensatzfilter angeben, der beim Abfragen der Datenätze verwendet werden soll. Erstellen Sie hierfür eine Dokumentenvariable, deren Name aus zwei Komponenten zusammengesetzt wird. Zum einen der Name, der im Punkt 2 festgelegten Textmarke. Für die Tabelle 1 wäre dies: z_Table. Der zweite Teil lautet OrgCondition. Der Name der Dokumentenvariable für die erste Word-Tabelle lautet also: z_TableOrgCondition. Als Wert erhält die neue Dokumentenvariable einen booleschen OrgBasic-Ausdruck. Es werden nur die Datensätze aufgelistet, für die der Ausdruck True ergibt.

Spezialfall: Gruppierte Tabellarische Auflistungen von Datensätzen aus untergeordneten (orgAnice-) Tabellen mit Hilfe von Textmarken

Um eine Tabelle mit gruppierten orgAnice-Datensätzen zu füllen, müssen Sie eine Tabelle mit 6 Zeilen und beliebig vielen Spalten erzeugen.

Die erste Zeile dient hierbei als Titelzeile, die zweite als Gruppentitelzeile, die dritte als Datenzeile, die vierte als Gruppensummenzeile, die fünfte als Zwischenzeile und die sechste als Gesamtsummenzeile.

Titel
Gruppentitel
Daten
Gruppensumme
Zwischenzeile
Gesamtsumme

Damit die Tabelle als gruppierte Tabelle erkannt wird, müssen Sie in der Tabelle eine Textmarke, z.B. „GroupTable“, und eine gleichnamigen Dokumentenvariable mit dem Inhalt „VBA_WordMacros.FillGroupedTable“ erzeugen.

Die Konfiguration erfolgt über weitere Dokumentenvariablen mit dem Präfix der Textmarke. Diese Dokumentenvariablen müssen existieren.

Konfiguration

TableName (z.B. GroupTable_TableName)

In dieser Dokumentenvariable wird der Name der orgAnice-Tabelle, aus der die Daten stamen, gespeichert.

Beispielinhalt:

Angebotspositionen

GroupExpression (z.B. GroupTable_GroupExpression)

In dieser Dokumentenvariable wird der OrgBasic-Ausdruck gespeichert, nach dem gruppiert wird. Z.B. Angebotspositionen->Artikelart. Hier würde dann nach der Artikelart gruppiert werden.

Optionale Einstellungsmöglichkeiten

Wenn z.B. mehrere Gesamtsummenzeilen verwenden wollen, dann müssen Sie dies in einer Dokumentenvariable angeben.

HeaderRowCount (z.B, GroupTable_HeaderRowCount)

In dieser Dokumentenvariable können Sie die Anzahl der Titelzeilen angeben. Hat diese z.B. den Wert 3, dann werden die ersten drei Zeilen als Titelzeilen interpretiert. Standardwert ist 1. Wenn Sie den Wert 0 angeben, dann wird keine Titelzeile erwartet.

GroupHeaderRowCount (z.B, GroupTable_ GroupHeaderRowCount)

In dieser Dokumentenvariable können Sie die Anzahl der Gruppentitelzeilen angeben. Standardwert ist 1. Wenn Sie den Wert 0 angeben, dann wird keine Gruppentitelzeile erwartet.

GroupDataRowCount (z.B, GroupTable_ GroupDataRowCount)

In dieser Dokumentenvariable können Sie die Anzahl der Datenzeilen angeben. Standardwert ist 1. Wenn Sie den Wert 0 angeben, dann wird keine Datenzeile erwartet.

GroupSumRowCount (z.B, GroupTable_ GroupSumRowCount)

In dieser Dokumentenvariable können Sie die Anzahl der Gruppensummenzeilen angeben. Standardwert ist 1. Wenn Sie den Wert 0 angeben, dann wird keine Gruppensummenzeile erwartet.

PartingLineRowCount (z.B, GroupTable_ PartingLineRowCount)

In dieser Dokumentenvariable können Sie die Anzahl der Zwischenzeilen angeben. Standardwert ist 1. Wenn Sie den Wert 0 angeben, dann wird keine Zwischenzeile erwartet.

TotalSumRowCount (z.B, GroupTable_ TotalSumRowCount)

In dieser Dokumentenvariable können Sie die Anzahl der Gesamtsummenzeilen angeben. Standardwert ist 1. Wenn Sie den Wert 0 angeben, dann wird keine Gesamtsummenzeile erwartet.

Desweiteren lässt sich die Tabelle auch noch über weitere optionale Dokumenten-variablen anpassen.

IndexName (z.B. GroupTable_IndexName)

Name des Indexes, der für die Sortierung der Datensätze genommen wird. Wenn diese Variable nicht existiert, dann wird der aktive Index genommen.

Condition (z.B. GroupTable_Condition)

OrgBasic-Ausdruck, mit dem Sie die angezeigten Datensätze einschränken können. Standardmäßig wird keine Einschränkung vorgenommen.

IgnoreInSum (z.B. GroupTable_IgnoreInSum)

OrgBasic-Ausdruck für die Datensätze, die für die Bildung der Summen ignoriert werden. In Angeboten kann der Ausdruck für Alternativpositionen benutzt werden, die nicht in der Gesamtsumme auftreten.

SortOrder (z.B. GroupTable_SortOrder)

In dieser Dokumentenvariable wird die Reihenfolge festgelegt, in der die Gruppen erscheinen. Die Werte entsprechen der Enumeration OrgDbSumEnum aus der OrgDbServer31-Bibliothek. Mögliche Werte sind:

Count

Group

Max

Min

StdEv

Sum

Var

Standardwert ist Group.

PartingRowAfterHeader (z.B. GroupTable_PartingRowAfterHeader)

Wenn diese Dokumentenvariable auf True gesetzt wird, dann erscheint eine Trennzeile nach der Titelzeile. Standardwert ist False.

PartingRowBetweenGroups (z.B. GroupTable_PartingRowBetweenGroups)

Wenn diese Dokumentenvariable auf False gesetzt wird, dann erscheint keine Trennzeile nach der Titelzeile. Standardwert ist True.

PartingRowAfterGroupHeader (z.B. GroupTable_PartingRowAfterGroupHeader)

Wenn diese Dokumentenvariable auf True gesetzt wird, dann erscheint eine Trennzeile nach der Gruppentitelzeile. Standardwert ist False.

PartingRowBeforeGroupSum (z.B. GroupTable_PartingRowBeforeGroupSum)

Wenn diese Dokumentenvariable auf True gesetzt wird, dann erscheint eine Trennzeile vor der Gruppensummenzeile. Standardwert ist False.

PartingRowBeforeTotalSum (z.B. GroupTable_PartingRowBeforeTotalSum)

Wenn diese Dokumentenvariable auf False gesetzt wird, dann erscheint keine Trennzeile vor der Gruppensummenzeile. Standardwert ist True.

HideHeaderRow (z.B. GroupTable_HideHeaderRow)

Wenn diese Dokumentenvariable auf True gesetzt wird, dann wird keine Titelzeile angezeigt. Standardwert ist False.

HideGroupHeaderRow (z.B. GroupTable_HideGroupHeaderRow)

Wenn diese Dokumentenvariable auf True gesetzt wird, dann wird keine Gruppentitelzeile angezeigt. Standardwert ist False.

HideDataRows (z.B. GroupTable_HideDataRows)

Wenn diese Dokumentenvariable auf True gesetzt wird, dann werden keine Datenzeilen angezeigt. Standardwert ist False.

HideGroupSumRow (z.B. GroupTable_HideGroupSumRow)

Wenn diese Dokumentenvariable auf True gesetzt wird, dann wird keine Gruppensummenzeile angezeigt. Standardwert ist False.

HideTotalSumRow (z.B. GroupTable_HideTotalSumRow)

Wenn diese Dokumentenvariable auf True gesetzt wird, dann wird keine Gesamtsummenzeile angezeigt. Standardwert ist False.

HeaderRowBeforeGroups (z.B. GroupTable_HeaderRowBeforeGroups )

Wenn diese Dokumentenvariable auf True gesetzt wird, dann erscheint eine Titelzeile vor jeder Gruppe. Standardwert ist False.

HeaderRowBeforeGroupHeader (z.B. GroupTable_HeaderRowBeforeGroupHeader)

Wenn diese Dokumentenvariable auf True gesetzt wird, dann erscheint eine Titelzeile vor jeder Gruppentitelzeile. Standardwert ist False.

HeaderRowAfterGroupHeader (z.B. GroupTable_HeaderRowAfterGroupHeader)

Wenn diese Dokumentenvariable auf True gesetzt wird, dann erscheint eine Titelzeile vor jeder Gruppentitelzeile. Standardwert ist True.

HideGroupHeaderForSingleGroup (z.B. GroupTable_HideGroupHeaderForSingleGroup)

Wenn diese Dokumentenvariable auf False gesetzt wird, dann wird auch wenn es genau eine Gruppe gibt eine Gruppentitelzeile angezeigt. Standardwert ist True.

HideGroupSumForSingleGroup (z.B. GroupTable_HideGroupSumForSingleGroup)

Wenn diese Dokumentenvariable auf False gesetzt wird, dann wird auch wenn es genau eine Gruppe gibt, eine Gruppensummenzeile angezeigt. Standardwert ist True.

HideTableForSingleGroup (z.B. GroupTable_HideTableForSingleGroup)

Wenn diese Dokumentenvariable auf True gesetzt wird, dann wird die komplette Tabelle nicht angezeigt, wenn es genau Gruppe gibt. Standardwert ist False.

HideAllPartingRows (z.B. GroupTable_HideAllPartingRows)

Wenn diese Dokumentenvariable auf True gesetzt wird, dann werden alle Trennzeilen ausgeblendet. Standardwert ist False.

Parserrequests mit Summierungausdrücken

In gruppierten Tabellen ist es möglich in den OrgBasic-Ausdrücken der Textmarken Summierungsausdrücke zu verwenden. Der zu summierende Ausdruck wird mithilfe eines XML-Tags (<sum></sum>) gekennzeichnet.

Beispiel: FormatBetrag(<sum>RechnungspositionNetto()</sum>) & " " & g_Waehrung

Hier wird der Ausdruck innerhalb des sum-Tags (RechnungspositionNetto()) für die aktuelle Gruppe summiert.

In der Gruppentitel-, Daten- und Gruppensummenzeile wird die aktuelle Gruppe aufsummiert. Ansonsten die Gesamtheit aller Gruppen.

Besonderheiten beim Erstellen von Gutschriften

Beim Erstellen von Gutschriften gibt es die Möglichkeit, die Rechnungssummen immer positiv auszugeben, auch wenn die eigentlichen Summen in den Daten negative Werte sind. Durch das Hinzufügen einer Dokumentvariable mit dem Namen „OrgNurPositiveSummen“ und dem Wert „True“ zu der Rechnungsvorlage erreicht man, dass die Summenzeilen immer positiv ausgegeben werden.

Verwendung von anderen Tabellennamen

Die Namen der zu verwendeten Tabellen können zusätzlich im Dokument verändert sein. Hierfür muss für jede Tabelle eine Dokumentenvariable mit dem Namen "VBA_TableName_<Name der Tabelle A>" angelegt werden, die als Wert den <Namen der Tabelle B> beinhaltet.

Damit kann bspw. eine spezielle Serienbriefvorlage erstellt werden, die eine andere Tabelle als die Tabelle "Adressen" durchläuft. Die Dokumentenvariable muss dann:

VBA_TableName_Adressen

heißen.

Der Wert muss den Namen der Tabelle beinhalten, die statt der Tabelle "Adressen" durchgegangen wird. Analog können weitere Dokumentenvariablen

VBA_TableName_Ansprechpartner,
VBA_TableName_Vorgaenge,
VBA_TableName_Aktivitaeten

usw. erstellt werden.

Regeln für AddOns und eigene Erweiterungen

Alle Module, Klassen und Formulare, die in OrgOffice.dot eingespielt werden sollen, müssen ein Präfix haben. Z.B.: PRJ_ oder ABC_ etc.

Wenn Sie eine Erweiterung erstellen möchten, die an mehrere Kunden ausgeliefert oder als einiges Produkt veröffentlicht werden soll, dann wenden Sie sich an die orgAnice Software GmbH für die Vergabe eines Entwicklerpräfixes.

Wenn Sie eine Erweiterung erstellen möchten, die nur für eine bestimmte Datenbank gelten soll (z.B. Ihre eigene oder die eines Kunden), dann verwenden Sie das Präfix „CSTM_“ (Customizing).

In der OrgOffice.dot befindet sich bereits das Modul CSTM_Macros, das als Vorlage für eigene Erweiterungen verwendet werden kann.

Ausführen von VBA-Prozeduren über Textmarken:

Erstellen Sie in Ihrer Dokumentvorlage (z.B. Brief.doc) über den Menüpunkt „orgAnice – Textmarken bearbeiten“ eine neue Textmarke mit einem beliebigen Namen.

Es wird automatisch eine gleichnamige Dokumentvariable erstellt. Geben Sie als Ausdruck (Wert der Dokumentvariable) die zu startende Prozedur an in der Form: VBA_<Modulname>.<Prozedurname> ein.
Bsp. Sie möchten die Prozedur CSTM_MeinMakro aus dem Modul CSTM_Macros starten. Geben Sie dann den folgenden Ausdruck ein:
VBA_CSTM_Macros.CSTM_MeinMakro

Die eigentliche Prozedurdeklaration muss folgendermaßen aufgebaut sein:
Public Sub Meineprozedur(pDoc As CDocument, psBookmark As String)

Ausführen von VBA-Prozeduren, bevor das Dokument ausgefüllt wird:

Erweitern Sie die Prozedur CSTM_Macros.Vorlauf oder

Fügen Sie der Vorlage eine Dokumentvariable names "VBA_CSTM_DoBefore" hinzu. Geben Sie der Dokumentvariable die zu startende Prozedur an in der Form: VBA_<Modulname>.<Prozedurname> ein.

Ausführen von VBA-Prozeduren, nachdem das Dokument ausgefüllt wird:

Erweitern Sie die Prozedur CSTM_Macros.Nachlauf oder

Fügen Sie der Vorlage eine Dokumentvariable names "VBA_CSTM_DoAfter" hinzu. Geben Sie der Dokumentvariable die zu startende Prozedur an in der Form: VBA_<Modulname>.<Prozedurname> ein.

Die aus orgAnice 3.0, 3.1 und 4.0 bekannte Datei Custom3.dot/Custom31.dot wird aus Kompatibilitätsgründen noch unterstützt, für eigene Erweiterungen empfehlen wir die direkte Erweiterung der OrgOffice.dot.

Die Textmarken werden in alphabetischer Reihenfolge abgearbeitet, Sie können also über die Namensvergabe steuern, an welcher Stelle Ihre Prozedur gestartet wird.